﻿#pragma once

#include <iostream>
#include <vector> // 引入动态数组
#include <assert.h>
using std::cout; // 命名空间声明
using std::endl;
using std::string;
using std::vector;
#include <utility>//引入 pair 类型，用于返回类似于键值对的结构，可使用 make_pair 构造 pair 对象
#include <tuple> // 引入 tuple 类型，用于返回多个值，可以使用 make_tuple 构造 tuple 对象

struct Person {
    string name;
    int age;
    double money;

    // 构造函数
    Person() : name(""), age(-1), money(-1) {}

    Person(string out_name, int out_age, double out_money)
        : name(out_name), age(out_age), money(out_money) {
    }

    void print_p() {
        cout << "Name: " << name << "    "
            << "Age: " << age << "    "
            << "Money: " << money << endl;
    }

    // 重载 operator <<
    friend std::ostream& operator<<(std::ostream& os, const Person& p) {
        // friend 声明，使得 Person 类可以访问 ostream 类的私有成员 operator <<
        // 不用 friend 就不能添加自定义的 const Person& p
        os << p.name << "    "
            << "Age: " << p.age << "    "
            << "Money: " << p.money;
        return os;
    }
};

extern void test_return();
